package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import modelo.*;

public class ProdutoDao extends GenericDao{

	public ProdutoDao(Connection con) {
		super(con);
	}
	public ProdutoDao() {
		super();
	}
	public void inserir(Produto produto) throws DaoException{
		try {
			String sql = "INSERT INTO produto VALUES(?,?,?,?,?,?)";
			PreparedStatement pSt = con.prepareStatement(sql); 
			
			int i = 1;
			pSt.setInt(i++, produto.getCodigo());
			pSt.setString(i++, produto.getDenominacao());
			pSt.setInt(i++, produto.getQuantidade());
			pSt.setString(i++, produto.getUnidadeMedida());
			pSt.setDouble(i++, produto.getValor());
			pSt.setInt(i++, produto.getAlmoxarifado().getCodigo());
			pSt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			throw new DaoException(e);
		}
	}
	public Produto buscar(int codProduto) throws DaoException{
		Produto produto = null;
		try {
			String sql = "SELECT * FROM produto WHERE codProduto = ?";
			PreparedStatement pSt = con.prepareStatement(sql);
			pSt.setInt(1, codProduto);
			ResultSet rs = pSt.executeQuery();
			if(rs.next()){
				produto = extrairProduto(rs);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			throw new DaoException(e);
		}
		return produto;
	}
	// private Produto extractProduto(ResultSet rs){return new Produto();}
	// public Collection<Produto> buscarPedidos
	
	public Collection<Produto> buscarProdutoPorAlmoxarifado(Almoxarifado almoxarifado) throws DaoException{
		Collection<Produto> produtos = new ArrayList<Produto>();
		try {
			String sql = "SELECT * FROM produto WHERE codAlmoxarifado = ?";
			PreparedStatement pSt = con.prepareStatement(sql);
			pSt.setInt(1, almoxarifado.getCodigo());
			ResultSet rs = pSt.executeQuery();
			while( rs.next() ){
				Produto produto = extrairProduto(rs);
				produto.setAlmoxarifado(almoxarifado);
				produtos.add(produto);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			throw new DaoException(e);
		}
		
		return produtos;
	}
	private Produto extrairProduto(ResultSet rs) throws SQLException {
		Produto produto = new Produto();
		produto.setCodigo(rs.getInt("codProduto"));
		produto.setDenominacao(rs.getString("denominacao"));
		produto.setQuantidade(rs.getInt("quantidade"));
		produto.setUnidadeMedida(rs.getString("unidadeMedida"));
		produto.setValor(rs.getDouble("valor"));
		return produto;
	}
	public void remover(int codigo) throws DaoException {
		String sql = "DELETE FROM produto WHERE codProduto = ?";
		
		try {
			PreparedStatement pSt = con.prepareStatement(sql);
			pSt.setInt(1, codigo);
			pSt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			throw new DaoException(e);
		}
	}

}

